<?php
/*
 * Created on 01/12/2008
 *
 * To change the template for this generated file go to
 * Window - Preferences - PHPeclipse - PHP - Code Templates
 */
class VListaCrud {
    protected $form;
    protected $operacao;
    protected $conexao;
    protected $modelo;
    protected $sql;
    protected $texto;
    protected $tabela;
    public	  $formPesquisa;
    public	  $sair;
    public	  $voltar;
    public    $editavel = true;
    public    $html;
    public    $seguranca;

    public function __construct(Modelo $modelo) {
        $this->seguranca = new Seguranca(get_class($this));
        // Guarda a Conexao com o Banco de Dados
        $this->conexao 	= $modelo->getConexao();
        // Guarda o Modelo enviado
        $this->modelo	= $modelo;
        // Se a Operacao estiver vazia, a Operacao padrao é listar
        $this->setOperacao(empty($_REQUEST["op"])?"listar":$_REQUEST["op"]);
    }
    public function getPermissao($op){
        //return true;
        return $this->seguranca->getPermissao($op);
    }
    public function barraFerramentas($op){
        $metodo = "barraFerramentas_" . $op;
        if(in_array($metodo, get_class_methods(get_class($this)))){
            $this->$metodo();
        }
    }
    public function setOperacao($op){
        // Configuro a Operacao
        $this->operacao = $op;
        // Verifico se tem alguma barra de ferramentas
        $this->barraFerramentas($op);
        if($this->getPermissao($op)){
            $this->html = $this->$op();
        }
        else{
            die("Voce nao possui permsissao para acessar esta funcao.");
        }
        
    }
    public function getHtml(){
        return $this->html;
    }
    public function sqlLista(){
        $tabelaBD 	= $this->modelo->_getEntidade();
        $this->sql = "SELECT * FROM $tabelaBD ";
    }

    public function filtrar(){
        // Se alguem digitou uma nova pesquisa.
        if (isset($_GET["pesquisa"])){
            // Armazeno a pesquisa na variavel filtro
            $filtro = $_GET["pesquisa"];
            // coloco esse filtro em session
            $_SESSION["filtro"] = $filtro;
            // limpo as informa��es de paginacao
            $_SESSION["pag"] = null;
        } else {
            // Caso contr�rio pego as informa��es do filtro.
            $filtro = $_SESSION["filtro"];
        }

        if(!empty($filtro)){
            $this->sql .= " WHERE nome LIKE '%$filtro%' ";
            $this->txt  = "Filtro: Resultados que cont�m $filtro";
        }
    }
    public function getFormPesquisa(){
        $campo = new CampoBusca('pesquisaModulo','pesquisa');
        $campo = $campo->getHtml();
        $this->formPesquisa = "" .
            "<form name='pesq' action='# method='get'>\n".
        $campo .
            "</form>\n" .
            "Registros Encontrados:" . $this->tabela->getQtdeLinhas() . "<br>\n" ;
        return $this->formPesquisa;
    }
    public function getFormCabecalhoLista(){
        $form = "" .
                "<form name='VListaCrud' id='VListaCrud' method='post' action=''>\n".
                "	<input type='hidden' name='op' id='op' value='' />\n" ;
        //"	<input type='button' name='Submit2' value='Voltar' onclick='" . $this->voltar() . "' /> \n";
        return $form;
    }

    public function getFormRodapeLista(){
        $form = "" .
        //"	<input type='submit' name='Botao' value='Novo' />\n" .
        //"	<input name='op' id='op' type='hidden' value='novo' />\n" .
                "</form>";
        //"	<input type='button' name='Submit2' value='Voltar' onclick='" . $this->voltar() . "' />\n" .
        return $form;
    }

    public function getFormCabecalho(){
        $form = "" .
                "<form name='VListaCrud' id='VListaCrud' method='post' action=''>\n".
                "<fieldset>" .
                "	<input type='hidden' name='op' id='op' value='' />\n" ;
        return $form;
    }
    public function getFormRodape(){
        $form = "</fieldset>" .
                "</form>" .
                "</div>";
        return $form;
    }


    public function getForm(){

        $form = $this->getFormCabecalho();
        $array_metodos = get_class_methods(get_class($this));
        $tag = $this->editavel?"":"disabled";
        foreach($this->modelo->_getArray() as $atr=>$valor) {
            $mtd	= "get". ucfirst($atr);
            $fk		= strpos($atr, "_");
            if (in_array($mtd, $array_metodos)) {
                $form 	.= $this->$mtd();
            } elseif ($atr == $this->modelo->_getCampoChavePrimaria()) {
                $form	.= new VInputHidden($atr, $valor);
            } elseif ($fk)  {
                $lbl = strtolower(substr($atr,0,$fk));
                $form  	.= new VInputSelect($atr, $valor, $lbl, "SELECT * FROM $lbl", $this->editavel);
            } else {
                $form	.= new VInputText($atr, $valor,$atr,$this->editavel);
            }
        }
        $form .= $this->maisCampos();
        $form .= $this->getFormRodape();
        return $form;
    }
    // Para complementar alguns campos no Form (Heran�a)
    public function maisCampos(){
        return "";
    }
    public function barraFerramentas_listar(){
        $script = "
                    $('#acaoDel').click(function(){
                        var op = $('#acaoDel').val();
                        var resposta = confirm('Tem certeza que quer deletar os registros selecionados ?', false);
                        //alert(resposta);
                        if(resposta){
                            $('#op').val(op);
                            $('#VListaCrud').submit();
                        }
                        return false;
                    });";
        BarraFerramentas::addAcao('novo', 'acaoAdd');
        BarraFerramentas::addAcao('deleteTodos', 'acaoDel', $script);
    }
    public function listar(){
        $this->sqlLista();
        $this->filtrar();
        $this->tabela = new VListaEdicaoPaginada($this->conexao, $this->sql);
        return $this->getFormPesquisa() . $this->getFormCabecalhoLista() . $this->tabela . $this->getFormRodapeLista();
    }
    public function barraFerramentas_novo(){
        BarraFerramentas::addAcao('Salvar', 'acaoSalvar');
        BarraFerramentas::addAcao('listar', 'acaoVoltar');
    }

    public function novo(){
        return $this->getForm();
    }
    public function barraFerramentas_edit(){
        BarraFerramentas::addAcao('Salvar', 'acaoSalvar');
        BarraFerramentas::addAcao('delete', 'acaoDel');
        BarraFerramentas::addAcao('listar', 'acaoVoltar');
    }
    public function edit(){
        $this->modelo->select($_GET["id"]);
        return $this->getForm();
    }
    public function deleteTodos(){
            $selecionados = $_POST['lstEdicao'];
            foreach($selecionados as $reg) {
                $this->modelo->select($reg);
                $this->modelo->delete();
            }
            return $this->setOperacao('listar');
    }
    public function del(){
        BarraFerramentas::addAcao('novo', 'acaoSalvar');
        BarraFerramentas::addAcao('listar', 'acaoVoltar');
        $this->modelo->select($_GET["id"]);
        $this->editavel = false;
        return $this->getForm();
    }
/**
    public function btListar(){
        return "	<input type='button' name='lista' value='Voltar' onclick='location.href=\"?op=listar\"' />\n";
    }


    public function voltar(){
        return "javascript:history.go(-1)";
    }
*/
    public function salvar(){
        $this->modelo->post();
        $this->modelo->salvar();
        $this->setOperacao('listar');
        return $this->getHtml();
    }
    public function delete(){
        $this->modelo->post();
        $this->modelo->delete();
        $this->setOperacao('listar');
        return $this->getHtml();
    }
    public function alterar(){
        $this->modelo->post();
        $this->modelo->salvar();
        $this->setOperacao('listar');
        return $this->getHtml();
    }
}
?>